package utils;

//目标是写出各种类型的比对器，目前version1.0只有数组
public class ComparatorUtil {

    public static ArrayComparator arrayComparator = new ArrayComparator();

    public static class ArrayComparator {
        /**
         * 产生最大值为max，最大长度为size的数组 [可能产生负数]
         * 其大小范围为[-max, max]
         */
        public int[] generateRandomArray(int size, int max) {
            int[] res = new int[(int)Math.random() * (size + 1)];
            for (int i = 0; i < res.length; i++) {
                res[i] = (int)(Math.random() * (max + 1) - Math.random() * max);
            }
            return res;
        }

        /**
         * 产生最大值为max，最大长度为size的数组，范围[0, max]
         */
        public int[] generatePositiveArray(int size, int max) {
            int[] res = new int[(int)Math.random() * (size + 1)];
            for (int i = 0; i < res.length; i++) {
                res[i] = (int)(Math.random() * (max + 1));
            }
            return res;
        }

        //数组比对器 此比对器认为两个数组如果全为null也是正确的
        public boolean isArrayEqual(int[] nums1, int[] nums2) {
            int l1, l2;
            if (nums1 == null && nums2 == null)  return true;
            else if (nums1 == null || nums2 == null) return false;
            else if ((l1 = nums1.length) != (l2 = nums2.length)) return false;
            else {
                for (int i = 0; i < l1; i++) {
                    if (nums1[i] != nums2[i]) return false;
                }
                return true;
            }
        }

        public int[] arrayCopier(int[] nums) {
            int[] newNums = new int[nums.length];
            System.arraycopy(nums, 0, newNums, 0, nums.length);
            return newNums;
        }
    }
}
